//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS BedrockDataAutomation service.
///
/// Amazon Bedrock Data Automation BuildTime
public struct BedrockDataAutomation: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the BedrockDataAutomation client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: AWSMiddlewareProtocol? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            serviceName: "BedrockDataAutomation",
            serviceIdentifier: "bedrock-data-automation",
            signingName: "bedrock",
            serviceProtocol: .restjson,
            apiVersion: "2023-07-26",
            endpoint: endpoint,
            errorType: BedrockDataAutomationErrorType.self,
            middleware: middleware,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }





    // MARK: API Calls

    /// Creates an Amazon Bedrock Data Automation Blueprint
    @Sendable
    @inlinable
    public func createBlueprint(_ input: CreateBlueprintRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateBlueprintResponse {
        try await self.client.execute(
            operation: "CreateBlueprint", 
            path: "/blueprints/", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an Amazon Bedrock Data Automation Blueprint
    ///
    /// Parameters:
    ///   - blueprintName: 
    ///   - blueprintStage: 
    ///   - clientToken: 
    ///   - encryptionConfiguration: 
    ///   - schema: 
    ///   - tags: 
    ///   - type: 
    ///   - logger: Logger use during operation
    @inlinable
    public func createBlueprint(
        blueprintName: String,
        blueprintStage: BlueprintStage? = nil,
        clientToken: String? = CreateBlueprintRequest.idempotencyToken(),
        encryptionConfiguration: EncryptionConfiguration? = nil,
        schema: String,
        tags: [Tag]? = nil,
        type: `Type`,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateBlueprintResponse {
        let input = CreateBlueprintRequest(
            blueprintName: blueprintName, 
            blueprintStage: blueprintStage, 
            clientToken: clientToken, 
            encryptionConfiguration: encryptionConfiguration, 
            schema: schema, 
            tags: tags, 
            type: type
        )
        return try await self.createBlueprint(input, logger: logger)
    }

    /// Creates a new version of an existing Amazon Bedrock Data Automation Blueprint
    @Sendable
    @inlinable
    public func createBlueprintVersion(_ input: CreateBlueprintVersionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateBlueprintVersionResponse {
        try await self.client.execute(
            operation: "CreateBlueprintVersion", 
            path: "/blueprints/{blueprintArn}/versions/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new version of an existing Amazon Bedrock Data Automation Blueprint
    ///
    /// Parameters:
    ///   - blueprintArn: ARN generated at the server side when a Blueprint is created
    ///   - clientToken: 
    ///   - logger: Logger use during operation
    @inlinable
    public func createBlueprintVersion(
        blueprintArn: String,
        clientToken: String? = CreateBlueprintVersionRequest.idempotencyToken(),
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateBlueprintVersionResponse {
        let input = CreateBlueprintVersionRequest(
            blueprintArn: blueprintArn, 
            clientToken: clientToken
        )
        return try await self.createBlueprintVersion(input, logger: logger)
    }

    /// Creates an Amazon Bedrock Data Automation Project
    @Sendable
    @inlinable
    public func createDataAutomationProject(_ input: CreateDataAutomationProjectRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateDataAutomationProjectResponse {
        try await self.client.execute(
            operation: "CreateDataAutomationProject", 
            path: "/data-automation-projects/", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an Amazon Bedrock Data Automation Project
    ///
    /// Parameters:
    ///   - clientToken: 
    ///   - customOutputConfiguration: 
    ///   - encryptionConfiguration: 
    ///   - overrideConfiguration: 
    ///   - projectDescription: 
    ///   - projectName: 
    ///   - projectStage: 
    ///   - standardOutputConfiguration: 
    ///   - tags: 
    ///   - logger: Logger use during operation
    @inlinable
    public func createDataAutomationProject(
        clientToken: String? = CreateDataAutomationProjectRequest.idempotencyToken(),
        customOutputConfiguration: CustomOutputConfiguration? = nil,
        encryptionConfiguration: EncryptionConfiguration? = nil,
        overrideConfiguration: OverrideConfiguration? = nil,
        projectDescription: String? = nil,
        projectName: String,
        projectStage: DataAutomationProjectStage? = nil,
        standardOutputConfiguration: StandardOutputConfiguration,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateDataAutomationProjectResponse {
        let input = CreateDataAutomationProjectRequest(
            clientToken: clientToken, 
            customOutputConfiguration: customOutputConfiguration, 
            encryptionConfiguration: encryptionConfiguration, 
            overrideConfiguration: overrideConfiguration, 
            projectDescription: projectDescription, 
            projectName: projectName, 
            projectStage: projectStage, 
            standardOutputConfiguration: standardOutputConfiguration, 
            tags: tags
        )
        return try await self.createDataAutomationProject(input, logger: logger)
    }

    /// Deletes an existing Amazon Bedrock Data Automation Blueprint
    @Sendable
    @inlinable
    public func deleteBlueprint(_ input: DeleteBlueprintRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteBlueprintResponse {
        try await self.client.execute(
            operation: "DeleteBlueprint", 
            path: "/blueprints/{blueprintArn}/", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an existing Amazon Bedrock Data Automation Blueprint
    ///
    /// Parameters:
    ///   - blueprintArn: ARN generated at the server side when a Blueprint is created
    ///   - blueprintVersion: Optional field to delete a specific Blueprint version
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteBlueprint(
        blueprintArn: String,
        blueprintVersion: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteBlueprintResponse {
        let input = DeleteBlueprintRequest(
            blueprintArn: blueprintArn, 
            blueprintVersion: blueprintVersion
        )
        return try await self.deleteBlueprint(input, logger: logger)
    }

    /// Deletes an existing Amazon Bedrock Data Automation Project
    @Sendable
    @inlinable
    public func deleteDataAutomationProject(_ input: DeleteDataAutomationProjectRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteDataAutomationProjectResponse {
        try await self.client.execute(
            operation: "DeleteDataAutomationProject", 
            path: "/data-automation-projects/{projectArn}/", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an existing Amazon Bedrock Data Automation Project
    ///
    /// Parameters:
    ///   - projectArn: ARN generated at the server side when a DataAutomationProject is created
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDataAutomationProject(
        projectArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteDataAutomationProjectResponse {
        let input = DeleteDataAutomationProjectRequest(
            projectArn: projectArn
        )
        return try await self.deleteDataAutomationProject(input, logger: logger)
    }

    /// Gets an existing Amazon Bedrock Data Automation Blueprint
    @Sendable
    @inlinable
    public func getBlueprint(_ input: GetBlueprintRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetBlueprintResponse {
        try await self.client.execute(
            operation: "GetBlueprint", 
            path: "/blueprints/{blueprintArn}/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets an existing Amazon Bedrock Data Automation Blueprint
    ///
    /// Parameters:
    ///   - blueprintArn: ARN generated at the server side when a Blueprint is created
    ///   - blueprintStage: Optional field to get a specific Blueprint stage
    ///   - blueprintVersion: Optional field to get a specific Blueprint version
    ///   - logger: Logger use during operation
    @inlinable
    public func getBlueprint(
        blueprintArn: String,
        blueprintStage: BlueprintStage? = nil,
        blueprintVersion: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetBlueprintResponse {
        let input = GetBlueprintRequest(
            blueprintArn: blueprintArn, 
            blueprintStage: blueprintStage, 
            blueprintVersion: blueprintVersion
        )
        return try await self.getBlueprint(input, logger: logger)
    }

    /// Gets an existing Amazon Bedrock Data Automation Project
    @Sendable
    @inlinable
    public func getDataAutomationProject(_ input: GetDataAutomationProjectRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDataAutomationProjectResponse {
        try await self.client.execute(
            operation: "GetDataAutomationProject", 
            path: "/data-automation-projects/{projectArn}/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets an existing Amazon Bedrock Data Automation Project
    ///
    /// Parameters:
    ///   - projectArn: ARN generated at the server side when a DataAutomationProject is created
    ///   - projectStage: Optional field to delete a specific DataAutomationProject stage
    ///   - logger: Logger use during operation
    @inlinable
    public func getDataAutomationProject(
        projectArn: String,
        projectStage: DataAutomationProjectStage? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDataAutomationProjectResponse {
        let input = GetDataAutomationProjectRequest(
            projectArn: projectArn, 
            projectStage: projectStage
        )
        return try await self.getDataAutomationProject(input, logger: logger)
    }

    /// Lists all existing Amazon Bedrock Data Automation Blueprints
    @Sendable
    @inlinable
    public func listBlueprints(_ input: ListBlueprintsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListBlueprintsResponse {
        try await self.client.execute(
            operation: "ListBlueprints", 
            path: "/blueprints/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all existing Amazon Bedrock Data Automation Blueprints
    ///
    /// Parameters:
    ///   - blueprintArn: 
    ///   - blueprintStageFilter: 
    ///   - maxResults: 
    ///   - nextToken: 
    ///   - projectFilter: 
    ///   - resourceOwner: 
    ///   - logger: Logger use during operation
    @inlinable
    public func listBlueprints(
        blueprintArn: String? = nil,
        blueprintStageFilter: BlueprintStageFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        projectFilter: DataAutomationProjectFilter? = nil,
        resourceOwner: ResourceOwner? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListBlueprintsResponse {
        let input = ListBlueprintsRequest(
            blueprintArn: blueprintArn, 
            blueprintStageFilter: blueprintStageFilter, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            projectFilter: projectFilter, 
            resourceOwner: resourceOwner
        )
        return try await self.listBlueprints(input, logger: logger)
    }

    /// Lists all existing Amazon Bedrock Data Automation Projects
    @Sendable
    @inlinable
    public func listDataAutomationProjects(_ input: ListDataAutomationProjectsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDataAutomationProjectsResponse {
        try await self.client.execute(
            operation: "ListDataAutomationProjects", 
            path: "/data-automation-projects/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all existing Amazon Bedrock Data Automation Projects
    ///
    /// Parameters:
    ///   - blueprintFilter: 
    ///   - maxResults: 
    ///   - nextToken: 
    ///   - projectStageFilter: 
    ///   - resourceOwner: 
    ///   - logger: Logger use during operation
    @inlinable
    public func listDataAutomationProjects(
        blueprintFilter: BlueprintFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        projectStageFilter: DataAutomationProjectStageFilter? = nil,
        resourceOwner: ResourceOwner? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDataAutomationProjectsResponse {
        let input = ListDataAutomationProjectsRequest(
            blueprintFilter: blueprintFilter, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            projectStageFilter: projectStageFilter, 
            resourceOwner: resourceOwner
        )
        return try await self.listDataAutomationProjects(input, logger: logger)
    }

    /// List tags for an Amazon Bedrock Data Automation resource
    @Sendable
    @inlinable
    public func listTagsForResource(_ input: ListTagsForResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTagsForResourceResponse {
        try await self.client.execute(
            operation: "ListTagsForResource", 
            path: "/listTagsForResource", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// List tags for an Amazon Bedrock Data Automation resource
    ///
    /// Parameters:
    ///   - resourceARN: 
    ///   - logger: Logger use during operation
    @inlinable
    public func listTagsForResource(
        resourceARN: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTagsForResourceResponse {
        let input = ListTagsForResourceRequest(
            resourceARN: resourceARN
        )
        return try await self.listTagsForResource(input, logger: logger)
    }

    /// Tag an Amazon Bedrock Data Automation resource
    @Sendable
    @inlinable
    public func tagResource(_ input: TagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> TagResourceResponse {
        try await self.client.execute(
            operation: "TagResource", 
            path: "/tagResource", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Tag an Amazon Bedrock Data Automation resource
    ///
    /// Parameters:
    ///   - resourceARN: 
    ///   - tags: 
    ///   - logger: Logger use during operation
    @inlinable
    public func tagResource(
        resourceARN: String,
        tags: [Tag],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> TagResourceResponse {
        let input = TagResourceRequest(
            resourceARN: resourceARN, 
            tags: tags
        )
        return try await self.tagResource(input, logger: logger)
    }

    /// Untag an Amazon Bedrock Data Automation resource
    @Sendable
    @inlinable
    public func untagResource(_ input: UntagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UntagResourceResponse {
        try await self.client.execute(
            operation: "UntagResource", 
            path: "/untagResource", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Untag an Amazon Bedrock Data Automation resource
    ///
    /// Parameters:
    ///   - resourceARN: 
    ///   - tagKeys: 
    ///   - logger: Logger use during operation
    @inlinable
    public func untagResource(
        resourceARN: String,
        tagKeys: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UntagResourceResponse {
        let input = UntagResourceRequest(
            resourceARN: resourceARN, 
            tagKeys: tagKeys
        )
        return try await self.untagResource(input, logger: logger)
    }

    /// Updates an existing Amazon Bedrock Data Automation Blueprint
    @Sendable
    @inlinable
    public func updateBlueprint(_ input: UpdateBlueprintRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateBlueprintResponse {
        try await self.client.execute(
            operation: "UpdateBlueprint", 
            path: "/blueprints/{blueprintArn}/", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates an existing Amazon Bedrock Data Automation Blueprint
    ///
    /// Parameters:
    ///   - blueprintArn: ARN generated at the server side when a Blueprint is created
    ///   - blueprintStage: 
    ///   - encryptionConfiguration: 
    ///   - schema: 
    ///   - logger: Logger use during operation
    @inlinable
    public func updateBlueprint(
        blueprintArn: String,
        blueprintStage: BlueprintStage? = nil,
        encryptionConfiguration: EncryptionConfiguration? = nil,
        schema: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateBlueprintResponse {
        let input = UpdateBlueprintRequest(
            blueprintArn: blueprintArn, 
            blueprintStage: blueprintStage, 
            encryptionConfiguration: encryptionConfiguration, 
            schema: schema
        )
        return try await self.updateBlueprint(input, logger: logger)
    }

    /// Updates an existing Amazon Bedrock Data Automation Project
    @Sendable
    @inlinable
    public func updateDataAutomationProject(_ input: UpdateDataAutomationProjectRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateDataAutomationProjectResponse {
        try await self.client.execute(
            operation: "UpdateDataAutomationProject", 
            path: "/data-automation-projects/{projectArn}/", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates an existing Amazon Bedrock Data Automation Project
    ///
    /// Parameters:
    ///   - customOutputConfiguration: 
    ///   - encryptionConfiguration: 
    ///   - overrideConfiguration: 
    ///   - projectArn: ARN generated at the server side when a DataAutomationProject is created
    ///   - projectDescription: 
    ///   - projectStage: 
    ///   - standardOutputConfiguration: 
    ///   - logger: Logger use during operation
    @inlinable
    public func updateDataAutomationProject(
        customOutputConfiguration: CustomOutputConfiguration? = nil,
        encryptionConfiguration: EncryptionConfiguration? = nil,
        overrideConfiguration: OverrideConfiguration? = nil,
        projectArn: String,
        projectDescription: String? = nil,
        projectStage: DataAutomationProjectStage? = nil,
        standardOutputConfiguration: StandardOutputConfiguration,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateDataAutomationProjectResponse {
        let input = UpdateDataAutomationProjectRequest(
            customOutputConfiguration: customOutputConfiguration, 
            encryptionConfiguration: encryptionConfiguration, 
            overrideConfiguration: overrideConfiguration, 
            projectArn: projectArn, 
            projectDescription: projectDescription, 
            projectStage: projectStage, 
            standardOutputConfiguration: standardOutputConfiguration
        )
        return try await self.updateDataAutomationProject(input, logger: logger)
    }
}

extension BedrockDataAutomation {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: BedrockDataAutomation, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension BedrockDataAutomation {
    /// Return PaginatorSequence for operation ``listBlueprints(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listBlueprintsPaginator(
        _ input: ListBlueprintsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListBlueprintsRequest, ListBlueprintsResponse> {
        return .init(
            input: input,
            command: self.listBlueprints,
            inputKey: \ListBlueprintsRequest.nextToken,
            outputKey: \ListBlueprintsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listBlueprints(_:logger:)``.
    ///
    /// - Parameters:
    ///   - blueprintArn: 
    ///   - blueprintStageFilter: 
    ///   - maxResults: 
    ///   - projectFilter: 
    ///   - resourceOwner: 
    ///   - logger: Logger used for logging
    @inlinable
    public func listBlueprintsPaginator(
        blueprintArn: String? = nil,
        blueprintStageFilter: BlueprintStageFilter? = nil,
        maxResults: Int? = nil,
        projectFilter: DataAutomationProjectFilter? = nil,
        resourceOwner: ResourceOwner? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListBlueprintsRequest, ListBlueprintsResponse> {
        let input = ListBlueprintsRequest(
            blueprintArn: blueprintArn, 
            blueprintStageFilter: blueprintStageFilter, 
            maxResults: maxResults, 
            projectFilter: projectFilter, 
            resourceOwner: resourceOwner
        )
        return self.listBlueprintsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listDataAutomationProjects(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDataAutomationProjectsPaginator(
        _ input: ListDataAutomationProjectsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDataAutomationProjectsRequest, ListDataAutomationProjectsResponse> {
        return .init(
            input: input,
            command: self.listDataAutomationProjects,
            inputKey: \ListDataAutomationProjectsRequest.nextToken,
            outputKey: \ListDataAutomationProjectsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDataAutomationProjects(_:logger:)``.
    ///
    /// - Parameters:
    ///   - blueprintFilter: 
    ///   - maxResults: 
    ///   - projectStageFilter: 
    ///   - resourceOwner: 
    ///   - logger: Logger used for logging
    @inlinable
    public func listDataAutomationProjectsPaginator(
        blueprintFilter: BlueprintFilter? = nil,
        maxResults: Int? = nil,
        projectStageFilter: DataAutomationProjectStageFilter? = nil,
        resourceOwner: ResourceOwner? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDataAutomationProjectsRequest, ListDataAutomationProjectsResponse> {
        let input = ListDataAutomationProjectsRequest(
            blueprintFilter: blueprintFilter, 
            maxResults: maxResults, 
            projectStageFilter: projectStageFilter, 
            resourceOwner: resourceOwner
        )
        return self.listDataAutomationProjectsPaginator(input, logger: logger)
    }
}

extension BedrockDataAutomation.ListBlueprintsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> BedrockDataAutomation.ListBlueprintsRequest {
        return .init(
            blueprintArn: self.blueprintArn,
            blueprintStageFilter: self.blueprintStageFilter,
            maxResults: self.maxResults,
            nextToken: token,
            projectFilter: self.projectFilter,
            resourceOwner: self.resourceOwner
        )
    }
}

extension BedrockDataAutomation.ListDataAutomationProjectsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> BedrockDataAutomation.ListDataAutomationProjectsRequest {
        return .init(
            blueprintFilter: self.blueprintFilter,
            maxResults: self.maxResults,
            nextToken: token,
            projectStageFilter: self.projectStageFilter,
            resourceOwner: self.resourceOwner
        )
    }
}
